# !/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
===========================
@Time : 2022/8/26 0026 23:02
@Author : 测试开发工程师
@File : 13. sql_model_demo.py
@Software: PyCharm
============================
"""

import yaml
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import *
# 导入 Query 以便于调用的时候代码提示
from sqlalchemy.orm import Query

app = Flask(__name__)

with open("./data.yaml") as f:
    result = yaml.safe_load(f)
    username = result.get('database').get('username')
    password = result.get('database').get('password')
    server = result.get('database').get('server')
    db = result.get('database').get('db')

app.config['SQLALCHEMY_DATABASE_URI'] = f'mysql+pymysql://{username}:{password}@{server}/{db}?charset=utf8'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
# SQLAlchemy 绑定 app
db = SQLAlchemy(app)


# 定义数据库的表，需要继承 db.Model
class User(db.Model):
    # 设置数据库表名
    __tablename__ = "user"
    # 每一个类变量 （如 id，username） 表示一个数据库表的列名
    # 第一个参数 是表示数据的类型， primary_key=True 表示是主键
    id = Column(Integer, primary_key=True)
    # unique = True 表示是不能重复的， nullable=False 表示不可以为空
    # 用户名 不唯一
    username = Column(String(80), nullable=False)
    # email 唯一
    email = Column(String(120), unique=True, nullable=False)
    # gender 不唯一
    gender = Column(String(3))

    # 魔法函数  方便打印
    def __repr__(self):
        return f"<User{self.id},{self.username},{self.gender},{self.email}>"


if __name__ == '__main__':
    # 创建 表
    db.create_all()
    # 删除 表
    db.drop_all()
    # 创建 表
    user = User(id=1, username="hogwarts", email='123@123.com', gender='男')
    print(user)
